package com.linyaonan.leetcode.easy._3090;


/**
 *
 * 给你一个字符串 s ，请找出满足每个字符最多出现两次的最长子字符串，并返回该
 * 子字符串
 * 的 最大 长度。
 *
 *
 *
 * 示例 1：
 *
 * 输入： s = "bcbbbcba"
 *
 * 输出： 4
 *
 * 解释：
 *
 * 以下子字符串长度为 4，并且每个字符最多出现两次："bcbbbcba"。
 *
 * 示例 2：
 *
 * 输入： s = "aaaa"
 *
 * 输出： 2
 *
 * 解释：
 *
 * 以下子字符串长度为 2，并且每个字符最多出现两次："aaaa"。
 *
 *
 *
 * 提示：
 *
 * 2 <= s.length <= 100
 * s 仅由小写英文字母组成。
 *
 * @author: Lin
 * @date: 2024/10/27
 */
public class MaximumLengthSubstringWithTwoOccurrences {

    public int maximumLengthSubstring(String s) {
        // 1. 特殊边界
        if (s.length() == 2) {
            return 2;
        }
        // 用于保存每个字符出现的次数
        int[] saved = new int[26];
        int l = 0;
        int r = 2;
        saved[s.charAt(0) - 'a'] += 1;
        saved[s.charAt(1) - 'a'] += 1;
        int result = 2;
        // 设置双指针遍历的边界
        while (l <= r && r <= s.length() - 1) {
            char c = s.charAt(r);
            if (canAdd(saved, c)) {
                saved[s.charAt(r) - 'a'] += 1;
                r++;
                result = Math.max(result, r - l);
            } else {
                saved[s.charAt(l) - 'a'] -= 1;
                l++;
            }
        }

        return result;

    }

    public boolean canAdd(int[] saved, char c) {
        return saved[c - 'a'] < 2;
    }

}
